package com.chia.multienty.core.service.impl;

import com.chia.multienty.core.domain.condition.UserCondition;
import com.chia.multienty.core.domain.condition.UserOrOAuthCondition;
import com.chia.multienty.core.pojo.TenantPayLog;
import com.chia.multienty.core.mapper.TenantPayLogMapper;
import com.chia.multienty.core.service.TenantPayLogService;
import com.chia.multienty.core.mybatis.service.impl.KutaBaseServiceImpl;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.chia.multienty.core.domain.dto.TenantPayLogDTO;
import com.chia.multienty.core.parameter.tenant.TenantPayLogDetailGetParameter;
import com.chia.multienty.core.parameter.tenant.TenantPayLogPageGetParameter;
import com.chia.multienty.core.parameter.tenant.TenantPayLogDeleteParameter;
import com.chia.multienty.core.parameter.tenant.TenantPayLogSaveParameter;
import com.chia.multienty.core.parameter.tenant.TenantPayLogUpdateParameter;
import com.chia.multienty.core.parameter.tenant.TenantPayLogEnableParameter;
import com.chia.multienty.core.parameter.tenant.TenantPayLogDisableParameter;
import com.github.yulichang.toolkit.MPJWrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import com.chia.multienty.core.domain.constants.MultientyConstants;
import com.chia.multienty.core.mybatis.MTLambdaWrapper;
import com.chia.multienty.core.util.ListUtil;
import com.chia.multienty.core.domain.enums.StatusEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chia.multienty.core.tools.IdWorkerProvider;
/**
 * <p>
 * 租户支付日志 服务实现类
 * </p>
 *
 * @author Multi Tenant Auto Generator
 * @since 2024-07-19
 */
@Service
@RequiredArgsConstructor
@Conditional(UserOrOAuthCondition.class)
public class TenantPayLogServiceImpl extends KutaBaseServiceImpl<TenantPayLogMapper, TenantPayLog> implements TenantPayLogService {


    @Override
    public TenantPayLogDTO getDetail(TenantPayLogDetailGetParameter parameter) {
        return selectJoinOne(TenantPayLogDTO.class,
                        MPJWrappers.<TenantPayLog>lambdaJoin().eq(TenantPayLog::getLogId, parameter.getLogId()));
    }

    @Override
    public void update(TenantPayLogUpdateParameter parameter) {
        TenantPayLog tenantPayLog = new TenantPayLog();
        BeanUtils.copyProperties(parameter, tenantPayLog);
        updateByIdTE(tenantPayLog);
    }

    @Override
    public void delete(TenantPayLogDeleteParameter parameter) {
        removeByIdTE(parameter.getLogId());
    }

    @Override
    public IPage<TenantPayLogDTO> getPage(TenantPayLogPageGetParameter parameter) {
        return selectJoinListPage(parameter.getPageObj(), TenantPayLogDTO.class,
                new MTLambdaWrapper<TenantPayLog>()
                        .solveGenericParameters(parameter)
                        .in(!ListUtil.isEmpty(parameter.getLogIds()),
                                TenantPayLog::getLogId,
                                parameter.getLogIds())
        );
    }

    @Override
    public void save(TenantPayLogSaveParameter parameter) {
        TenantPayLog tenantPayLog = new TenantPayLog();
        BeanUtils.copyProperties(parameter, tenantPayLog);
        tenantPayLog.setLogId(IdWorkerProvider.next());

        saveTE(tenantPayLog);
        parameter.setLogId(tenantPayLog.getLogId());
    }


    @Override
    public void enable(TenantPayLogEnableParameter parameter) {
        TenantPayLog tenantPayLog = new TenantPayLog();
        BeanUtils.copyProperties(parameter, tenantPayLog);
        tenantPayLog.setStatus(StatusEnum.NORMAL.getCode());
        updateByIdTE(tenantPayLog);
    }

    @Override
    public void disable(TenantPayLogDisableParameter parameter) {
        TenantPayLog tenantPayLog = new TenantPayLog();
        BeanUtils.copyProperties(parameter, tenantPayLog);
        tenantPayLog.setStatus(StatusEnum.DISABLED.getCode());
        updateByIdTE(tenantPayLog);
    }
}
